﻿/*
输入：
5 5
1 3
3 5
1 2
2 4
4 5
输出：
1 3 5
1 2 4 5
*/

// N个节点，M条边
string[] NMStrArr = Console.ReadLine().Split(" ");
int N = int.Parse(NMStrArr[0]);
int M = int.Parse(NMStrArr[1]);

// 邻接表法存储图
List<int>[] graph = new List<int>[N+1];
for (int i = 0; i < graph.Length; i++)
{
    graph[i] = new List<int>();
}
for (int i = 0; i < M; i++)
{
    string[] stStrArr = Console.ReadLine().Split(" ");
    int s = int.Parse(stStrArr[0]);
    int t = int.Parse(stStrArr[1]);
    graph[s].Add(t);
}
// 存储结果
List<List<int>> result = new List<List<int>>();
List<int> path = new List<int>();
// 深度优先搜索 DFS -- 有向无环图，不存在回路
void dfs(List<int>[] graph, int start, int end)
{
    // 添加结果
    if (start == end)
    {
        result.Add(new List<int>(path));
        return;
    }
    
    // 遍历邻接顶点
    for (int i = 0; i < graph[start].Count; i++)
    {
        int point = graph[start][i];
        path.Add(point);
        dfs(graph, point, end);
        path.RemoveAt(path.Count - 1); // 回溯法
    }
}
path.Add(1);
dfs(graph, 1, N);

// 打印结果
if (result.Count == 0)
{
    Console.WriteLine(-1);
    return;
}
for (int i = 0; i < result.Count; i++)
{
    for (int j = 0; j < result[i].Count - 1; j++)
    {
        Console.Write($"{result[i][j]} ");
    }
    Console.WriteLine($"{result[i][^1]}");
}